﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Infra.Common.DAO
{
    public class MunicipioDAL
    {
        public static void Salvar(Infra.Entity.LOCMUNICIPIO municipio)
        {

            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                if (municipio.CODMUNICIPIO != 0)
                {
                    //Alterar o município
                    var muni = dc.LOCMUNICIPIOs.Single(mc => mc.CODMUNICIPIO == municipio.CODMUNICIPIO);
                    muni.STRMUNICIPIO = municipio.STRMUNICIPIO;
                    muni.CODPROVINCIA = municipio.CODPROVINCIA;
                    muni.CODPAIS = municipio.CODPAIS;
                    dc.SubmitChanges();
                }
                else
                {
                    //Salvar o município
                    dc.LOCMUNICIPIOs.InsertOnSubmit(municipio);
                    dc.SubmitChanges();
                }
            }
        }

        public static void Excluir(int idMunicipio)
        {
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var muni = dc.LOCMUNICIPIOs.Single(mc => mc.CODMUNICIPIO == idMunicipio);
                dc.LOCMUNICIPIOs.DeleteOnSubmit(muni);
                dc.SubmitChanges();
            }
        }

        public static List<Infra.Entity.LOCMUNICIPIO> Pesquisar(int codigo, String nome, long codProvincia, long codPais)
        {
            List<Infra.Entity.LOCMUNICIPIO> municipios = null;
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var muni = from municipio in dc.LOCMUNICIPIOs
                           where (((codigo.Equals(0) || codigo.Equals(municipio.CODMUNICIPIO)) &&
                                   (nome.Equals(string.Empty) || nome.Equals(municipio.STRMUNICIPIO.Contains(nome))) &&
                                   (codProvincia.Equals(0) || codProvincia.Equals(municipio.CODPROVINCIA)) &&
                                   (codPais.Equals(0) || codPais.Equals(municipio.CODPAIS))))

                           select municipio;
                municipios = muni.ToList();
            }
            return municipios;
        }



        public static List<Infra.Entity.LOCMUNICIPIO> Pesquisar(int codigos)
        {
            List<Infra.Entity.LOCMUNICIPIO> municipios = null;
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var M = from prov in dc.LOCPROVINCIAs
                        from Muni in dc.LOCMUNICIPIOs
                        where (codigos.Equals(prov.CODPROVINCIA))
                        select Muni;
                municipios = M.Distinct().ToList();
            }
            return municipios;
        }



        public static List<Infra.Entity.LOCMUNICIPIO> Pesquisar()
        {
            List<Infra.Entity.LOCMUNICIPIO> municipios = null;
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var muni = from municipio in dc.LOCMUNICIPIOs            
                           select municipio;
                municipios = muni.ToList();
            }
            return municipios;
        }



        public static List<Infra.Entity.LOCMUNICIPIO> PesquisarSP(int codigo, String nome, int codProvincia, int codPais)
        {
            List<Infra.Entity.LOCMUNICIPIO> municipios = null;
            // Pesquisa usando Stored procedure
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                //var muni = dc.SP_PESQUISA_MUNICIPIO(codigo, nome, codProvincia, codPais);
                //municipios = muni.ToList();
            }
            return municipios;
        }
    }
}
